home *** CD-ROM | disk | FTP | other *** search
/ Micromanía 93 / CDMM_93_2.ISO / Project Nomads / nomads_demo_eng.exe / CLIENT.TCL < prev    next >
Encoding:
Text File  |  2002-08-01  |  4.7 KB  |  182 lines

  1. #
  2. # client.tcl
  3. #
  4. # Multiplayer client specific win/loose handling.
  5. #
  6.  
  7.  
  8. # Client looses game
  9. proc client_loose {} {
  10.  
  11.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  12.     puts "You loose :(\n"
  13.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  14.     
  15.     # Get user clan
  16.     set clan [/world.getuserclan]
  17.     if {$clan == "null"} {
  18.         return
  19.     }
  20.     
  21.     # Remove Handcontrol.
  22.     /world.unsethandcontrol
  23.  
  24.     # Drop artefacts from character's belt.
  25.     set character [$clan.getmaennel]
  26.     if {$character != "null"} {
  27.         drop_artefacts $character
  28.     }
  29.     
  30.     # Release all objects in clan except island
  31.     release_objects $clan
  32.     
  33.     # Make sure there is no empty user clan! (Empty user clans are always
  34.     # trouble...)
  35.     $clan.setasuser false
  36.  
  37.     # Provide overview of level.
  38.     /world.resetviewer
  39.     /world.setviewer2 "/world/viewers/freeviewer"
  40.     /world/viewers/freeviewer.overview
  41.     
  42.     # Open ingame `loose' menu (If menu is open, close it).
  43.     if {[/sys/servers/menuhandler.menuopen] == "true"} {
  44.         /sys/servers/menuhandler.closemenu
  45.     }
  46.     /sys/servers/menuhandler.openmenu "multiplayer_loose"
  47.     /sys/servers/menuhandler.reset
  48. }
  49.  
  50.  
  51. # Client wins game
  52. proc client_win {} {
  53.  
  54.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  55.     puts "You win :)\n"
  56.     puts "\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\n"
  57.     
  58.     # Remove Handcontrol.
  59.     /game/handler/search.sethaircrossowner "null"
  60.     /world.unsethandcontrol
  61.  
  62.     # Provide overview of level.
  63.     /world.resetviewer
  64.     /world.setviewer2 "/world/viewers/freeviewer"
  65.     /world/viewers/freeviewer.overview
  66.         
  67.     # Open ingame `win' menu (If menu is open, close it).
  68.     if {[/sys/servers/menuhandler.menuopen] == "true"} {
  69.         /sys/servers/menuhandler.closemenu
  70.     }
  71.     /sys/servers/menuhandler.openmenu "multiplayer_win"
  72.     /sys/servers/menuhandler.reset
  73. }
  74.  
  75.  
  76. # Host left game
  77. proc connection_lost {} {
  78.  
  79.     puts "*** CONNECTION LOST! \n"
  80.  
  81.     # Get user clan
  82.     set clan [/world.getuserclan]
  83.     if {$clan == "null"} {
  84.         return
  85.     }
  86.     
  87.     # Remove Handcontrol.
  88.     /world.unsethandcontrol
  89.  
  90.     # Drop artefacts from character's belt.
  91.     set character [$clan.getmaennel]
  92.     if {$character != "null"} {
  93.         drop_artefacts $character
  94.     }
  95.     
  96.     # Release all objects in clan except island
  97.     release_objects $clan
  98.     
  99.     # Make sure there is no empty user clan! (Empty user clans are always
  100.     # trouble...)
  101.     $clan.setasuser false
  102.  
  103.     # Provide overview of level.
  104.     /world.resetviewer
  105.     /world.setviewer2 "/world/viewers/freeviewer"
  106.     /world/viewers/freeviewer.overview
  107.  
  108.     # Open `connection lost' menu
  109.     if {[/sys/servers/menuhandler.menuopen] == "false"} {
  110.     
  111.         /sys/servers/menuhandler.openmenu "connection_lost"
  112.         /sys/servers/menuhandler.reset
  113.     }
  114. }
  115.  
  116. # Respawn player at character starting position given by own island.
  117. proc respawn_character {} {
  118.     
  119.     set clan [/world.getuserclan]
  120.     if {$clan != "null"} {
  121.     
  122.         set character [$clan.getmaennel]
  123.         set island [$clan.getplayerisland]
  124.         
  125.         if {$character != "null"} {
  126.             if {[$character.getstate] == "gameend"} {
  127.                 if {[$character.isshadow] == "false"} {
  128.                     puts "*** Respawn character $character"
  129.  
  130.                     # Drop players artefacts
  131.                     drop_artefacts $character
  132.                     
  133.                     # Move player back to island.
  134.                     $character.respawn
  135.                     $character.setstate "normal"
  136.                     $character.setenergy 1
  137.                 }
  138.             }
  139.         }
  140.     }
  141. }
  142.  
  143. # Drop all artefacts from character's belt to character's position.
  144. proc drop_artefacts {character} {
  145.  
  146.     set artefacts [$character.artefactlist]
  147.     
  148.     puts "*** Drop artefacts. "
  149.     
  150.     set pos [$character.getposition]
  151.     set env_clan [/world.getenvironmentclan]
  152.     set clan [$character.getclan]
  153.  
  154.     foreach i $artefacts {
  155.         $character.takeoutartefact $i
  156.         $i.setposition [lindex $pos 0] [expr [lindex $pos 1] + 3] [lindex $pos 2]
  157.         
  158.         if {$clan != "null"} {
  159.             if {$env_clan != "null"} {
  160.                 $clan.moveobjecttoclan [$i.getfullname] [$env_clan.getclanid]
  161.             }
  162.         }
  163.     }
  164. }
  165.  
  166. # Release all objects in `clan' except for island.
  167. proc release_objects {clan} {
  168.  
  169.     # Iterate through objects in clan
  170.     for {set i [$clan.gethead]} \
  171.         {$i != "null"} \
  172.         {set i [$i.getsucc]} {
  173.  
  174.         # Look for lighthouse
  175.         if {[$i.isvehicleclass "concret.nature.island"] == "false"} {
  176.  
  177.             $i.setremoveable true
  178.         }
  179.     }
  180. }
  181.  
  182.